package com.demo.lab.service.impl;

import com.demo.lab.service.FileService;
import com.demo.lab.utils.TimeUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;


@Service
public class FileServiceImpl implements FileService {

    /**
     * Describe: 文件上传
     * Param: File
     * Return: id
     */
    @Override
    @Transactional
    public String upload(MultipartFile file) {
//        // 获取原始名字
//        String fileName = file.getOriginalFilename();
//        // 获取后缀名
//        String suffixName = fileName.substring(fileName.lastIndexOf("."));
//        // 文件保存路径
//        String filePath = "D:/Develop/lab/upload/";
//        // 文件重命名，防止重复
//        fileName = TimeUtils.getTime3();
//        // 文件对象
//        File dest = new File(filePath+fileName+suffixName);
//        // 判断路径是否存在，如果不存在则创建
//        if(!dest.getParentFile().exists()) {
//            dest.getParentFile().mkdirs();
//        }
//        try {
//            // 保存到服务器中
//            file.transferTo(dest);
//            return fileName+suffixName;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return "";
//        }


//        try{
//            // 获取原始名字
//            String fileName = file.getOriginalFilename();
//            // 获取后缀名
//            String suffixName = fileName.substring(fileName.lastIndexOf("."));
//            // 文件重命名，防止重复
//            fileName = TimeUtils.getTime3()+suffixName;
//            if(FtpUtil.uploadFile(fileName,file.getInputStream())){
//                System.out.println("文件上传成功！文件名为="+fileName);
//                return fileName;
//            }else {
//                System.out.println("文件上传失败！");
//                return "";
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//            return "";
//        }

        try {
            File fileP = new File("/www/server/lab/images/");
            if (!fileP.isDirectory()) {
                //递归生成文件夹
                fileP.mkdirs();
            }
            // 获取原始名字
            String fileName = file.getOriginalFilename();
            // 获取后缀名
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            // 文件重命名，防止重复
            fileName = TimeUtils.getTime3() + suffixName;
            file.transferTo(new File(fileP, fileName));
            return fileName;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }


    /**
     * Describe: 根据 文件名 下载文件
     * Param: id
     * Return: IO
     */
    @Override
    public void download(String name, HttpServletResponse response) throws Exception {
//        // 文件地址，真实环境是存放在数据库中的
//        File file = new File("D:/Develop/lab/upload//"+name);
//        // 穿件输入对象
//        FileInputStream fis = new FileInputStream(file);
//        // 设置相关格式
//        response.setContentType("application/force-download");
//        // 设置下载后的文件名以及header
//        response.addHeader("Content-disposition", "attachment;fileName=" + name);
//        // 创建输出对象
//        OutputStream os = response.getOutputStream();
//        // 常规操作
//        byte[] buf = new byte[1024];
//        int len = 0;
//        while((len = fis.read(buf)) != -1) {
//            os.write(buf, 0, len);
//        }
//        fis.close();


        // 文件地址，真实环境是存放在数据库中的
        File file = new File("/www/server/lab/images/" + name);
        // 穿件输入对象
        FileInputStream fis = new FileInputStream(file);
        // 设置相关格式
        response.setContentType("application/force-download");
        // 设置下载后的文件名以及header
        response.addHeader("Content-disposition", "attachment;fileName=" + name);
        // 创建输出对象
        OutputStream os = response.getOutputStream();
        // 常规操作
        byte[] buf = new byte[1024];
        int len = 0;
        while ((len = fis.read(buf)) != -1) {
            os.write(buf, 0, len);
        }
        fis.close();
    }


}
